﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using Ninject;
using PGE.AfastamentosTempMVC.Modelo;
using PGE.AfastamentosTempMVC.Repositorio.Interfaces;

namespace PGE.AfastamentosTempMVC.Repositorio.Implementacao
{
    public class FuncionarioRepositorio : IFuncionarioRepositorio
    {
        private IUnitOfWork _UntWork;

        [Inject]
        public FuncionarioRepositorio(IUnitOfWork UntWork)
        {
            _UntWork = UntWork;
        }

        #region IFuncionarioRepositorio Members

        public void Adicionar(Funcionario funcionario)
        {
            _UntWork.contexto.Funcionarios.Add(funcionario);
            _UntWork.Commit();
        }

        public void Editar(Funcionario funcionario)
        {
            _UntWork.contexto.Entry(funcionario).State = System.Data.EntityState.Modified;
            _UntWork.Commit();

        }

        public void Deletar(Funcionario funcionario)
        {
            _UntWork.contexto.Funcionarios.Remove(funcionario);
            _UntWork.Commit();
        }

        public void DeletarMuitos(Func<Funcionario, bool> where)
        {
            _UntWork.contexto.Funcionarios.Where(where).ToList().ForEach(Funcionario => _UntWork.contexto.Funcionarios.Remove(Funcionario));
            _UntWork.Commit();
        }

        public Funcionario ObterPorID(int Id)
        {
            return _UntWork.contexto.Funcionarios.Find(Id);
        }

        public Funcionario ObterPornome(Func<Funcionario, bool> where)
        {
            return _UntWork.contexto.Funcionarios.Where(where).FirstOrDefault();
        }

        public Funcionario ObterPrimeiro()
        {
            return _UntWork.contexto.Funcionarios.FirstOrDefault();

        }

        public Funcionario ObterPrimeiro(Func<Funcionario, bool> where)
        {
            return _UntWork.contexto.Funcionarios.Where(where).FirstOrDefault();
        }

        public IEnumerable<Funcionario> ListarTudo()
        {
            return _UntWork.contexto.Funcionarios.ToList();
        }

        public IQueryable<Funcionario> GetQueryable()
        {
            return _UntWork.contexto.Funcionarios;
        }

        public IEnumerable<Funcionario> ListarMuitos(Func<Funcionario, bool> where)
        {
            return _UntWork.contexto.Funcionarios.Where(where).ToList();
        }

        #endregion
    }
}
